{{tag>sgbd serveur réseau BROUILLON}}

----

====== Postgis ======
====Ce qu'est postgis====
[[http://postgis.refractions.net/|Postgis]] est une extension de [[postgresql|postgresql]] qui permet la gestion d'objets géographiques. Concrètement la cartouche spatiale postgis ajoute au serveur :
  *  la possibilité de définir le type de champ //geometry// 
  * l'ensemble des fonctions permettant les traitements géographiques
  * la base de référence des projections géographiques //spatial_ref_sys//
  * la base de gestion des attributs géographiques des tables //geometry_columns//
====Installation====
Installer le paquet correspondant à votre version de postgres, exemples:
  * [[apt://postgresql-13-postgis-3|postgresql-13-postgis-3]] sous [[:focal]]
  * [[apt://postgresql-10-postgis-2.4|postgresql-10-postgis-2.4]] sous [[:bionic]]

<note tip>Bien que déconseillé pour des grosses bases de donnée postgres, il est également possible d'utiliser un conteneur [[docker]] [[https://hub.docker.com/r/postgis/postgis/|postgres-postgis]]. Vous pouvez consulter le [[https://dokuwiki-arar.mom.fr/doku.php?id=informatique:api-rest:postgrest|tuto Postgrest]] qui y fait référence.
</note>
<code>
Les paquets supplémentaires suivants seront installés : 
  libgeos-3.2.2 libgeos-c1 libproj0 postgis proj-data
</code>

Les scripts nécessaires à la couche géographique de postgresql sont installé dans le dossier\\
 // /usr/share/postgresql/9.1/contrib/postgis-1.5/// ou\\
 // /usr/share/postgresql/10/contrib/postgis-2.4///

====Donner à une base la capacité géographique====

[[https://sist.pages.in2p3.fr/anf20-geomatique/02_bdd/02_1_notions_postgresql_postgis.html|Support de cours d'une formation SIG (partie sur PostGis)]]

Si le serveur dispose bien du module PostGis, il suffit d'exécuter sur la base :\\
<code sql>CREATE EXTENSION "postgis";</code>

FIXME les infos ci-dessous sont peut-être obsolète.
<note>
Les scripts donnés ci-après prennent pour hypothèse qu'un nouvel utilisateur a été créé avec la méthode [[postgresql#pour_aller_plus_loin|recommandée]]
</note>

Tout d'abord, créer la base de données en question
  createdb -U <nom_utilisateur> <nom_base_geo>
Puis on utilser le rôle postgres (super user postgresql)
  $ sudo -i -u postgres 
pour exécuter dans cet ordre les scripts suivants :

  psql -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql  <nom_base_geo>
  psql -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql  <nom_base_geo>

puis on quitte le shell postgres
  exit
  
<note tip>
Si vous êtes amenés à créer plusieurs bases géographiques, il peut être intéressant de créer une base qui serve de modèle, par exemple //template_postgis//
Il est ensuite très facile de créer une base géographique en appelant ce modèle lors de la création d'un base
  createdb -U <nom_utilisateur> -T template_postgis <nom_base_geo>
</note>

Pour faire des imports et des exports (car la fonction sur phppgadmin est bancale) :

  $ sudo -i -u postgres

export :
  pg_dump <nom_de_la_base> > nom_de_la_base.pgdump

import:
  cat  nom_de_la_base.pgdump | psql -d  nom_de_la_base
  
----

//Contributeurs : [[utilisateurs:yannick_LM|Yannick]], [[utilisateurs:sparky|Sparky]], [[utilisateurs:elemmire|Elemmire]], [[utilisateurs:aldian|Aldian]], [[utilisateurs:fred|Fred]], [[utilisateurs:xavierjm|XAVIER_jean-marie]], [[utilisateurs/bcag2]]. //